﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CreatingObjects3d
{
    [Serializable()]
    class ObjetoFicheroExterno
    {
        private struct Posicion
        {
            public float X;
            public float Y;
            public float Z;
        }

        private Posicion posicionObjeto;
        private String nombreObjeto;
        private String rutaFichero;        

        public ObjetoFicheroExterno(String ruta)
        {
            rutaFichero = ruta;
            nombreObjeto = "FICHERO3D";
            posicionObjeto.X = 0;
            posicionObjeto.Y = 0;
            posicionObjeto.Z = 0;            
        }

        public ObjetoFicheroExterno(String ruta, int numero)
        {
            rutaFichero = ruta;
            nombreObjeto = "FICHERO3D" + numero;
            posicionObjeto.X = 0;
            posicionObjeto.Y = 0;
            posicionObjeto.Z = 0;
        }

        #region Metodos Get

        /// <summary>
        /// Devuelve la posición del objeto en un array tipo float de 3 posiciones. (x-y-z).
        /// </summary>
        /// <returns></returns>
        public float[] getPosicion()
        {
            return new[] { posicionObjeto.X, posicionObjeto.Y, posicionObjeto.Z};
        }

        #endregion

        #region Metodos Set

        /// <summary>
        /// Introduce nuevos valores para la posición del objeto.
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="z"></param>
        public void setPosicion(float x, float y, float z)
        {
            posicionObjeto.X = x;
            posicionObjeto.Y = y;
            posicionObjeto.Z = z;
        }

        #endregion

        #region Metodos Get y Set C#

        /// <summary>
        /// Devuelve o asigna el nombre del objeto.
        /// </summary>
        public String NombreObjeto
        {
            get { return nombreObjeto; }
            set { nombreObjeto = value; }
        }

        /// <summary>
        /// Devuelve o asigna la ruta del fichero 3D externo.
        /// </summary>
        public String RutaFichero
        {
            get { return rutaFichero; }
            set { rutaFichero = value; }
        }

        #endregion

        public override string ToString()
        {
            String codigo;
            codigo = "Transform { translation" + String.Format(" {0} {1} {2} ", posicionObjeto.X, posicionObjeto.Y,posicionObjeto.Z);
            codigo += "children [ Inline { ";
            codigo += String.Format("url \"{0}\" ", rutaFichero);
            codigo += "} ] }";
            codigo.Replace(",", ".");
            return codigo;
        }
    }
}

/*
 Transform {
	translation 0 0 0
        children [
 *          Inline {
 *                  url ""
 *          }
 *      ]
 * }
 */